
'''
有一个函数，想在不改变这个函数的基础上给他增加一些功能，我们就可以使用装饰器
装饰器：是给一个函数增加一些功能的
'''
def outer(fn):  #这个函数就是给另一个函数增加功能能的，装饰器函数 ，
    #装饰器函数需要一个参数就是，被装饰的函数
    def inner(*args,**kwargs):
        ''' 给被装饰的函数增加一些功能'''
        ret = fn(*args,**kwargs) #调用被装饰的函数
        #另外增加一些新的功能
        print('添加一个沙发')
        print('添加一个床')
        return ret
    return inner

'''
@ 语法糖的作用：首先会调用装饰器函数，并且把被装饰函数作为参数传递进去
最后把返回来的函数重新赋值给被装饰器函数的函数名
'''
@outer
def house(type,area): #被装饰的函数
    print(f'我是一个{type}新房子,总面积{area}平米')
    return area

@outer
def villa(type,area,layer):
     print(f'我是一个{type}新房子,总面积{area}平米,{layer}层')
# house = outer(house) # 返回来的函数我们用a这个变量去接收
#现在调用的house函数不是原来的函数了，而是inner
result = house('三室两厅',120) #
print(result)
villa('独栋别墅',300,layer=3)

#装饰器的雏形